package com.zte.claa.inficombo.csa.app.service.rptparse.ext.claa;

import java.io.Serializable;

/**
 * 针对克拉自研产品，入网后会向云端发送请求配置数据的消息。
 * JS插件解析到该类请求消息，构造本对象，通知解析框架进行配置数据下发.
 * 
 * @author 0283000115
 *
 */
@SuppressWarnings("serial")
public class ConfDataRequest implements Serializable {
	// 请求类型：0--普通配置数据请求；1--配置总包数请求（GSP/SSP涉及）；
	public static final byte REQ_FLAG_COMMON = 0;
	public static final byte REQ_FLAG_PKGNUM = 1;
	
	// 分包模式：0--普通分包模式（GSP下每个sensor的初始化命令对应一个包，单个命令内部不再分包）；
	//        1-- 特殊分包模式（GSP-PT40小无线测温产品），GSP下只有一个虚拟sensor，只有一条初始命令，该命令内部分包，且单个子包可解；
	public static final byte PKG_MODE_NORMAL = 0;
	public static final byte PKG_MODE_SPECIAL = 1;
	// 最终传递给JS的特殊分包的当前请求包序号参数名（最终放到JSPara的devExtDatas中，类型是int）
	public static final String PKG_INDEX_PARA_NAME = "pkgindex";
	
	// 属性设置.
	private String appeui;
	private String deveui;
	private String cmdcode;
	private String projectid;
	// 请求类型 (GSP/SSP请求初始化配置总包数时需要置1）
	private byte reqflag = REQ_FLAG_COMMON; 
	// devport, 通常不需要设置.
	private int devport = 0;
	// 请求包序号（从0开始），非GSP/SSP的其他自研产品，不用设置该属性.
	private int pkgindex = 0;	
	
	// 分包模式
	private byte pkgmode = PKG_MODE_NORMAL;
	
	// 以下属性用于满足自研产品（特别是自研定位产品）的版本上报以及其他终端相关信息之用。
	// 其内容填写是JS解析插件在解析终端上报消息时附带添加.
	private String version = null;
	private String devtype = null;
	private String remark = null;
	
	public ConfDataRequest(){
		
	}

	public String getAppeui() {
		return appeui;
	}

	public void setAppeui(String appeui) {
		this.appeui = appeui;
	}

	public String getDeveui() {
		return deveui;
	}

	public void setDeveui(String deveui) {
		this.deveui = deveui;
	}

	public String getCmdcode() {
		return cmdcode;
	}

	public void setCmdcode(String cmdcode) {
		this.cmdcode = cmdcode;
	}

	public String getProjectid() {
		return projectid;
	}

	public void setProjectid(String projectid) {
		this.projectid = projectid;
	}

	public byte getReqflag() {
		return reqflag;
	}

	public void setReqflag(byte reqflag) {
		this.reqflag = reqflag;
	}

	public int getDevport() {
		return devport;
	}

	public void setDevport(int devport) {
		this.devport = devport;
	}

	public int getPkgindex() {
		return pkgindex;
	}

	public void setPkgindex(int pkgindex) {
		this.pkgindex = pkgindex;
	}

	public String getVersion() {
		return version;
	}

	public void setVersion(String version) {
		this.version = version;
	}

	public String getDevtype() {
		return devtype;
	}

	public void setDevtype(String devtype) {
		this.devtype = devtype;
	}

	public String getRemark() {
		return remark;
	}

	public void setRemark(String remark) {
		this.remark = remark;
	}

	public byte getPkgmode() {
		return pkgmode;
	}

	public void setPkgmode(byte pkgmode) {
		this.pkgmode = pkgmode;
	}

	// devtype不能考虑在内，因为其他地方会补充设置这个devtype。
	public boolean hasDevInitStateData(){
		return (this.version != null || this.remark != null);
	}
	
	public String toString(){
		StringBuffer sb = new StringBuffer();
		sb.append("appEui=").append(appeui).append(", ");
		sb.append("devEui=").append(deveui).append(", ");
		sb.append("cmdCode=").append(cmdcode).append(", ");
		sb.append("projectId=").append(projectid).append(", ");
		sb.append("devport=").append(devport).append(", ");
		sb.append("pkgindex=").append(pkgindex).append(", ");
		sb.append("pkgmode=").append(pkgmode).append(", ");
		sb.append("version=").append(version).append(", ");
		sb.append("devtype=").append(devtype).append(", ");
		sb.append("remark=").append(remark).append(", ");
		sb.append("reqflag=").append(reqflag);		
		return sb.toString();
	}
}
